package com.rw.coco.handler.message.reply.util;

import com.rw.coco.handler.message.reply.AdvancedReplyHandler;
import com.rw.coco.handler.message.reply.ReplyHandler;
import com.rw.coco.handler.message.reply.handler.command.*;
import com.rw.coco.util.config.CocoConfig;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 骰娘指令工具类
 */
public class DiceHandlerListUtil {
    public static List<ReplyHandler> get(CocoConfig cocoConfig) {
        List<ReplyHandler> diceHandlerList = new ArrayList<>();

        // .rh 暗骰
        diceHandlerList.add(new PrivateRollHandler(cocoConfig));
        // .r 扔骰
        diceHandlerList.add(new RollHandler(cocoConfig));
        // .ob 旁观模式
        diceHandlerList.add(new GroupObHandler(cocoConfig));
        // .st 设置属性
        diceHandlerList.add(new STHandler(cocoConfig));
        // .ra 属性检定
        diceHandlerList.add(new RAHandler(cocoConfig));
        // .rah 属性暗骰检定
        diceHandlerList.add(new RAHHandler(cocoConfig));
        // .nn 更改群昵称
        diceHandlerList.add(new NNHandler(cocoConfig));
        // .sc 理智鉴定
        diceHandlerList.add(new SCHandler(cocoConfig));
        // TODO 解决剩下的指令
        // .en 成长鉴定
        // .ti 临时症状抽取
        // .li 总结症状抽取
        // .who 随机打乱顺序
        // .setcoc 设置房规
        // .welcome 设置新人欢迎词
        // .set 设置默认骰子
        // .ri 先攻骰点
        // .coc 人物属性随机
        // .dnd 人物属性随机
        // .name 名字随机
        // .pc 管理人物卡
        // .damage 受到伤害
        // .heal 恢复血量
        // .si 设置重伤
        // .draw 牌堆
        // .deck 查看牌堆
        // .ww 骰池

        return diceHandlerList.stream()
                .map(AdvancedReplyHandler::new)
                .sorted(Comparator.comparingInt(AdvancedReplyHandler::priority).reversed())
                .collect(Collectors.toList());
    }
}
